package com.j2ee.filter.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.math.BigDecimal;

/**
 * @author JiangQikun
 * @date 2024/6/23 23:07
 */
public class ProxySale {

    public static void main(String[] args) {

        final LevnoSale levnoSale = new LevnoSale();

        // 创建代理类
        // 类加载器  接口数组：代理类和真是类实现同一个接口  处理器
        SaleInterface proxy= (SaleInterface) Proxy.newProxyInstance(levnoSale.getClass().getClassLoader(), levnoSale.getClass().getInterfaces(), new InvocationHandler() {
            // 代理对象 代理对象调用的方法  参数
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                // 增强方法: 增强入参，增强返回值，增强方法体执行逻辑
                System.out.println("代理类进行了增强。。。。");
                // 使用真实对象调用该方法
                return method.invoke(levnoSale, args);

            }
        });

        // 使用代理类去执行方法
        proxy.sale(new BigDecimal(8000));
    }

}
